filechooser: Add a readonly :shortcut-folders property
authorMatthias Clasen <mclasen@redhat.com>
Mon, 6 Jul 2020 15:03:02 +0000 (11:03 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 6 Jul 2020 15:03:48 +0000 (11:03 -0400)
This makes the shortcut folders list accessible in the
the inspector.

gtk/gtkfilechooser.c
gtk/gtkfilechooserbutton.c
gtk/gtkfilechooserutils.c
gtk/gtkfilechooserutils.h
gtk/gtkfilechooserwidget.c

index 0c42fb8f7b1a1a4479ceefade2c56a1f9464f7ab..b77652bd1cc85dc6f0ee10da01f1f8d1ad3924d5 100644 (file)
@@ -184,6 +184,22 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface)
                                                           G_TYPE_LIST_MODEL,
                                                           GTK_PARAM_READABLE));
 
+  /**
+   * GtkFileChooser:shortcut-folders:
+   *
+   * A #GListModel containing the shortcut folders that have been
+   * added with gtk_file_chooser_add_shortcut().
+   *
+   * The returned object should not be modified. It may
+   * or may not be updated for later changes.
+   */
+  g_object_interface_install_property (iface,
+                                       g_param_spec_object ("shortcut-folders",
+                                                          P_("Shortcut Folders"),
+                                                          P_("List model of shortcut folders"),
+                                                          G_TYPE_LIST_MODEL,
+                                                          GTK_PARAM_READABLE));
+
   /**
    * GtkFileChooser:create-folders:
    * 
index b735699a7533c31513efe065161e8bed214d7548..97bd4eab903c0bb1cc7320ac1e04a3faaa5ae76e 100644 (file)
@@ -1036,6 +1036,7 @@ gtk_file_chooser_button_get_property (GObject    *object,
     case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
     case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
     case GTK_FILE_CHOOSER_PROP_FILTERS:
+    case GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS:
       g_object_get_property (G_OBJECT (button->chooser), pspec->name, value);
       break;
 
index e3fb63673117b2353f78b52054db890c7e5765ad..d41d9513cb953f1417b437f624372bbb934f76de 100644 (file)
@@ -106,6 +106,9 @@ _gtk_file_chooser_install_properties (GObjectClass *klass)
   g_object_class_override_property (klass,
                                     GTK_FILE_CHOOSER_PROP_FILTERS,
                                     "filters");
+  g_object_class_override_property (klass,
+                                    GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS,
+                                    "shortcut-folders");
 }
 
 /**
index 5c5494a0ceb022e712b56761bc8a5920e3a176d4..3ca736c996aaf34bdced4da89d621a1abd88f3f6 100644 (file)
@@ -33,7 +33,8 @@ typedef enum {
   GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE,
   GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
   GTK_FILE_CHOOSER_PROP_FILTERS,
-  GTK_FILE_CHOOSER_PROP_LAST                   = GTK_FILE_CHOOSER_PROP_FILTERS
+  GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS,
+  GTK_FILE_CHOOSER_PROP_LAST                   = GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS
 } GtkFileChooserProp;
 
 void _gtk_file_chooser_install_properties (GObjectClass *klass);
index e9fb6cbcab947c9d89b3f777c5cc45749e636235..3551463c23843f8a820a2ee81f6563781a042012 100644 (file)
@@ -3076,6 +3076,10 @@ gtk_file_chooser_widget_get_property (GObject    *object,
       g_value_set_object (value, impl->filters);
       break;
 
+    case GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS:
+      g_value_take_object (value, gtk_file_chooser_get_shortcut_folders (GTK_FILE_CHOOSER (impl)));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -5625,6 +5629,9 @@ gtk_file_chooser_widget_add_shortcut_folder (GtkFileChooser  *chooser,
   GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
 
   gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), file);
+
+  g_object_notify (G_OBJECT (chooser), "shortcut-folders");
+
   return TRUE;
 }
 
@@ -5636,6 +5643,9 @@ gtk_file_chooser_widget_remove_shortcut_folder (GtkFileChooser  *chooser,
   GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
 
   gtk_places_sidebar_remove_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), file);
+
+  g_object_notify (G_OBJECT (chooser), "shortcut-folders");
+
   return TRUE;
 }